package com.itfenghuang.day11;

import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

public class A04_考试 {
    public static void main(String[] args) throws ParseException, IOException {
        /**
         *   1.编译时异常 与 运行时异常 区别
         *      编译时; 必须处理,不然编译不能通过
         *      运行时: 编译期可以不用处理,在运行字节码文件的时候可能会出现的异常
         *   2.数组和集合的区别
         *        1）数组的效率高于集合类.
         *        2）数组能存放基本数据类型和对象，而集合类中只能放对象。
         *        3）数组容量固定且无法动态改变，集合类容量动态改变。
         *        4）数组无法判断其中实际存有多少元素，length只告诉了array的容量。
         *        5）集合有多种实现方式和不同的适用场合，而不像数组仅采用顺序表方式。
         *        6）集合以类的形式存在，具有封装、继承、多态等类的特性，
         *        通过简单的方法和属性调用即可实现各种复杂操作，大大提高软件的开发效率。
         *
         *   3.ArrayList 和  LinkedList 的区别
         *     ArrayList:  查询块,增删慢
         *     LinkedList: 查询慢,增删块
         *
         *   4.HashSet如何检查重复?HashSet是如何保证数据不可重复的?
         *    调用 hashCode()方法,如果两个元素的哈希值相同,调用equals方法
         *     equals()方法比较的结果为true,那么会触发去重,如果是false,会将元素挂在链表上
         *
         *   5.简述自然排序和比较器排序的实现过程
         *
         *   自然排序:
         *           1.自定义类实现接口Comparable接口;
         *           2.重写compareTo方法
         *           3.根据返回值进行排序
         *   比较器排序:
         *           1.使用TreeSet的带参构造创建对象
         *           2.参数:Comparator接口的实现类(匿名内部类)
         *           3.重写compare方法,根据返回值进行排序
         *
         *   6.== 和 euqals 的区别
         *
         *      == 比较对象地址,基本类型的值
         *      equals 如果重写了equals方法,按照重写后的规则进行比较
         *
         *   7.常见的RuntimeException 有哪些?
         *      NullPointerException - 空指针引用异常
         *      ClassCastException - 类型强制转换异常。
         *      IllegalArgumentException - 传递非法参数异常。
         *      ArithmeticException - 算术运算异常
         *
         *
         *
         *
          */
        // 8.String str="2020-11-11 11:11:11",将以2020年11月11日 1日期1时11分11秒的
        String str="2020-11-11 11:11:11";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date parse = sdf.parse(str);
        SimpleDateFormat y = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
        String format = y.format(parse);
        System.out.println(format);

        //9.两种方法遍历
//        HashMap<String, Integer> map = new HashMap<>();
//        map.put("tom",18);
//        map.put("jack",17);
//        map.put("rose",20);
        //增强for
//        Set<String> set = map.keySet();
//        for (String s : set) {
//            Integer integer = map.get(s);
//            System.out.println(s+" "+integer);
//        }
        //迭代器
//        Set<Map.Entry<String, Integer>> entries = map.entrySet();
//        Iterator<Map.Entry<String, Integer>> iterator = entries.iterator();
//        while (iterator.hasNext()){
//            Map.Entry<String, Integer> next = iterator.next();
//            String key = next.getKey();
//            Integer value = next.getValue();
//            System.out.println(key+"="+value);
//        }

        // 10. ArrayList  去除集合中重复的元素
//        ArrayList<Object> list = new ArrayList<>();
//        list.add("aaa");
//        list.add("bbb");
//        list.add("ccc");
//        list.add("aaa");
//        HashSet<Object> h = new HashSet<>(list);
//        for (Object o : h) {
//            System.out.println(o);
//            list.add(o);
//        }

        //  11.删除所有的" aaa"
//        ArrayList<String> t = new ArrayList<>();
//        t.add("aaa");
//        t.add("bbb");
//        t.add("ccc");
//        t.add("aaa");
//        t.add("aaa");
//        for (int i = 0; i < t.size(); i++) {
//            if ("aaa".equals(t.get(i))){
//                t.remove(i);
//                i--;
//            }
//        }
//        System.out.println(t);

        //12  分别使用字节流和字节缓冲流进行拷贝文件
//        FileInputStream fis = new FileInputStream("D:\\it\\a.txt");
//        FileOutputStream fos = new FileOutputStream("D:\\kk\\b.txt");
//        byte[] bys=new byte[1024];
//        int len;
//        while ((len=fis.read(bys))!=-1){
//            fos.write(bys,0,len);
//        }
//        fos.close();
//        fis.close();

//        BufferedInputStream bis = new BufferedInputStream(fis);
//        BufferedOutputStream bos = new BufferedOutputStream(fos);
//        byte[] bys=new byte[1024];
//        int i;
//        while ((i=bis.read(bys))!=-1){
//            bos.write(bys,0,i);
//        }
//        bos.close();
//        bis.close();

        //  13 删除一个多级文件夹
        File file = new File("D:\\kk");
//        method(file);

        // 14. 控制台输入信息,程序将信息存储到文件 Info.txt中,可输入多条信息,每条信息储存一行
        // 输入 "886"  程序结束
        Scanner sc = new Scanner(System.in);
        FileWriter fw = new FileWriter("D:\\it\\Info.txt");
        ArrayList<Student> list = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            Student stu = new Student();
            System.out.println("姓名");
            String s1 = sc.nextLine();
            System.out.println("年龄");
            String s2 = sc.nextLine();
            System.out.println("性别");
            String s3 = sc.nextLine();
            stu.getName();
            stu.getAge();
            stu.getSex();

            list.add(stu);
            fw.write(s1+" "+s2+" "+s3);
            fw.write("\r\n");
        }
        fw.close();

    }

    private static void method(File file) {
        File[] files = file.listFiles();
        for (File file1 : files) {
            if (file1.isFile()){
                file1.delete();
            }else {
                method(file1);
            }
        }
        file.delete();
    }
}
class Student{
    private String name;
    private int age;
    private String sex;

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Student() {
    }

    public Student(String name, int age, String sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }
}
